<?php

/*
 * 迭代器模式
 * 用来遍历所有数据库表
 * 一个迭代器的实现,需要继承spl,一个PHP标准类库中的迭代器接口,这个接口一共需要实现五个方法,valid(),next(),current(),rewind(),key();
 * 
 */

namespace IMooc;

class AllUser implements \Iterator {

    //用来保存user表中所有的ID
    protected $_ids;
    //用来保存从数据库中取到的对象
    protected $_data = array();
    //用来保存迭代器的当前位置
    protected $_index;

    //用构造函数将数据库中所有的id取出来
    function __construct()
    {
        $db = Factory::getDatabase();
        $result = $db->query('select id from user'); //表示从user表中拿到所有的ID
        $this->_ids = $result->fetch_all(MYSQLI_ASSOC);
    }

    //用来获取当前的元素
    function current()
    {
        $id = $this->_ids[$this->_index]['id'];
        return Factory::getUser($id);
    }

    //用来获取下一个元素
    function next()
    {
        $this->_index ++;
    }

    //用来验证当前是否还有下一个元素
    function valid()
    {
        return $this->_index < count($this->ids);
    }

    //当迭代器迭代到末尾时,用来重置迭代器,使迭代器回到开头
    function rewind()
    {
        $this->_index = 0;
    }

    //表示在迭代器中的位置
    function key()
    {
        return $this->_index;
    }

}
